כמה זמן לקח לעמוד להטען ולמה? את התשובה שלאלה הזו אפשר לקבל על ידי שימוש בפונקציה microtime שמחזירה את הזמן הנוכחי בדיוק של חלקי שניה.
נקודת ייחוס
אנחנו, כבני אדם, סופרים את הזמן מאז שנת אפס (תחילת הספירה). זוהי נקודת הייחוס שלנו שממנה התחלנו לספור את הזמן. המחשבים לא כל כך עתיקים והם משתמשים בנקודת ייחוס שונה בתור האפס שלהם.
נקודת תחילת הספירה שלהם תואמת ל 01.01.1970 00:00 שלנו. זהו תאריך תחילתו של עידן היוניקס. כל פעם שתשאלו את המחשב - כמה זמן עבר מתחילת הספירה - הוא יחזיר לכם את כמות השניות שעברו מאז החצות של 1.1.1970
מה הקשר לפונקציה time
time היא הפוקנציה שמחזירה את מספר השניות מאז תחילת הספירה (מאז 1970). כל התאריכים שנשמרים במחשב - נשמרים בתור מספר השניות מאז תחילת הספירה. בעזרת הפונקציה time נוכל לחבר, לחסר ולחשב תאריכים.
כדי לדעת כמה זמן רץ סקריפט כלשהו - נוכל בתחילת הסקריפט להכניס למשתנה את הערך של $start = time() ובסוף הסקריפט לחסר את המשתנה מהזמן הנוכחי.
<?php
$start = time();
for ($i = 0; $i < 10000000; $i++);
echo time()-$start;
$start = time();
for ($i = 0; $i < 10000000; $i++);
echo time()-$start;
אילו היום היה ה 1.1.1970 והשעה הייתה 1 בלילה והיינו מפעילים את הסקריפט הנ"ל:
המשתנה $start היה מכיל את המספר 3600 (עברו 3600 שניות מאז תחילת הספירה)
כעבור חמש שניות שהלולאה הייתה מסתיימת , הפונקציה time בסוף הספקריפט הייתה מחזירה את המספר 3605 (עברו 3605 שניות מאז תחילת הספירה).
על ידי חיסור הזמן הנוכחי מהזמן שבו הסקריפט הופעל - נקבל את משך פעילות הסקריפט. הלולאה עבדה למשך 3605 - 3600 = 5 שניות.
יחידות זמן קטנות יותר
במובן של מחשבים - שנייה זה ההההמון זמן. בשנייה אחת מחשב מסוגל לבצע כמות ענקית של פעולות ולכן רוב הסקריפטים מתבצעים בהרבה פחות משניה. למזלנו המחשב יודע לספור לא רק שניות שלמות, אלה גם חלקי שניות.
כמו שכל שעה אפשר לחלק לחלקים קטנים יותר (שניות), גם כל שניה אפשר לחלק לחלקים קטנים יותר - מילישניות (אלפיות השניה). כל אלפית אפשר לחלק עוד יותר — למיקרושניות.
הפונקציה time מחזירה את מספר השניות המלאות מאז תחילת הספירה.
הפונקציה microtime מחזירה מחרוזת שכוללת את חלקי השניה (כמות המיקרושניות), רווח, ואת את כמות השניות בדומה לזה, של time
echo microtime(); // 0.96711500 1309979927
נוכל להשתמש במיקרושניות לחישוב זמן פעולת הסקריפט באופן הבא:
נניח שבתחילת הסקריפט החזירה פונקציית microtime את המספר 100.
כלומר- עברו מאה מילישניות מאז תחילת השנייה הנוכחית.
בסוף הסקריפט החזירה הפונקציה את המספר 300. באמצעות חיסור נדע שהסקריפט רץ למשך 200 מילישניות בדיוק.
אבל זה מחורזת... wtf??
כדי שיהיה לנו יותר קל, הכניסו המפתחים בגרסה php 5.1 פרמטר חדש לפונקציה — האם להחזיר מספר, או האם להחזיר מחרוזת.
echo microtime(); // string "0.69747200 1309980195"
echo microtime(true); // int 1309980195.6979
echo microtime(true); // int 1309980195.6979
כשיש לנו מספרים, הרבה יותר קל לחסר אותם ולדעת בדיוק כמה זמן לקח ללולאה להתבצע.
$start = microtime(true);
for ($i = 0; $i < 10000000; $i++);
echo microtime(true) - $start;
for ($i = 0; $i < 10000000; $i++);
echo microtime(true) - $start;
אצלי הקוד הזה התבצע תוך 2.2050380706787 שניות.
תוך כמה אצלכם ?
תגובות לכתבה:
אצלי זה לקח 0.654757976532
על השרת :)
חתיכת מהר :)
אני מאשים את כרטיס המסך שלי. זה בטח בגללו.
כרטיס מסך? בטוח? O.O
תודה רבה אלכס.
ענית על הבקשה שלי מהר, תודה רבה! (זה אני שפרסם בדף הרעיונות על microtime), המדריך מאוד עזר לי, וכל הכבוד שאתה משקיע ככה
1.7447690963745
על localhost
מה פתחתם פה benchmark ?
jbstyle, לפי התגובה אני מסיק שאתה מתבייש בתוצאות של המחשב שלך :)
כל אחד מסיק מה שהוא רוצה .
לא טרחתי אפילו להריץ את זה כי עד כמה שאני זוכר הנושא פה זה להגיב לכתבה, לא להתחיל להשוות מהירויות ביצוע .
:-)
למה אני מקבל את התוצאה הפוך?
1311533498.86?
אתה לא מקבל את התוצאה הפוך. לא חיסרת משהו. אנה פנה לפורום לקבלת עזרה פרטית בצירוף הקוד שלך
אוקיי, הבנתי את הבעיה,
עכשיו אני מקבל:
0.00285911560059